package abq2.jic.jic.plugin.operate.healthMonitoring;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.ext.form.control.Markdown;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.DispatchServiceHelper;

import java.text.SimpleDateFormat;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;

/**
 *                             _ooOoo_
 *                            o8888888o
 *                            88" . "88
 *                            (| -_- |)
 *                            O\  =  /O
 *                         ____/`---'\____
 *                       .'  \\|     |//  `.
 *                      /  \\|||  :  |||//  \
 *                     /  _||||| -:- |||||-  \
 *                     |   | \\\  -  /// |   |
 *                     | \_|  ''\---/''  |   |
 *                     \  .-\__  `-`  ___/-. /
 *                   ___`. .'  /--.--\  `. . __
 *                ."" '<  `.___\_<|>_/___.'  >'"".
 *               | | :  `- \`.;`\ _ /`;.`/ - ` : | |
 *               \  \ `-.   \_ __\ /__ _/   .-` /  /
 *          ======`-.____`-.___\_____/___.-`____.-'======
 *                             `=---='
 *          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 *                     佛祖保佑        永无BUG
 *            佛曰:
 *                   写字楼里写字间，写字间里程序员；
 *                   程序人员写程序，又拿程序换酒钱。
 *                   酒醒只在网上坐，酒醉还来网下眠；
 *                   酒醉酒醒日复日，网上网下年复年。
 *                   但愿老死电脑间，不愿鞠躬老板前；
 *                   奔驰宝马贵者趣，公交自行程序员。
 *                   别人笑我忒疯癫，我笑自己命太贱；
 *                   不见满街漂亮妹，哪个归得程序员？
 */

/**
 * 用于智能健康检测生成检测报告
 */
public class HealthMonitoring extends AbstractBillPlugIn {
    @Override
    public void registerListener(EventObject e) {
        //注册点击事件
        super.registerListener(e);
        this.addItemClickListeners("tbmain");
    }

    public void itemClick(ItemClickEvent e) {
        super.itemClick(e);
        if (e.getItemKey().equalsIgnoreCase("abq2_analyze")) {
            //获取日任务信息，并且以JSON字符串的形式展现
            JSONObject jsonResultObject = new JSONObject();
            //基本信息
            jsonResultObject.put("name", this.getModel().getValue("abq2_name").toString()); //体检人姓名
            jsonResultObject.put("createtime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.getModel().getValue("createtime"))); //体检时间
            jsonResultObject.put("gender",this.getModel().getValue("abq2_gender")); //性别
            jsonResultObject.put("age",this.getModel().getValue("abq2_age")); //年龄
            jsonResultObject.put("pmh",this.getModel().getValue("abq2_pmh")); //既往病史
            //外科
            jsonResultObject.put("height",this.getModel().getValue("abq2_height")); //身高
            jsonResultObject.put("weight",this.getModel().getValue("abq2_weight")); // 体重
            jsonResultObject.put("fourLimbs",this.getModel().getValue("abq2_four_limbs")); //四肢
            jsonResultObject.put("lymph",this.getModel().getValue("abq2_lymph")); //淋巴
            jsonResultObject.put("thyroid",this.getModel().getValue("abq2_thyroid")); //甲状腺
            jsonResultObject.put("spine",this.getModel().getValue("abq2_spine")); //脊柱
            //内科
            jsonResultObject.put("breath",this.getModel().getValue("abq2_breath")); //呼吸
            jsonResultObject.put("pulse",this.getModel().getValue("abq2_pulse")); //脉搏
            jsonResultObject.put("booldPressure",this.getModel().getValue("abq2_blood_pressure")); //血压
            jsonResultObject.put("nerve",this.getModel().getValue("abq2_nerve")); //神经系统
            jsonResultObject.put("breathSystem",this.getModel().getValue("abq2_breath_system")); //呼吸系统
            jsonResultObject.put("abdomen",this.getModel().getValue("abq2_abdomen")); //腹部器官
            //五官科
            jsonResultObject.put("nakedVision",this.getModel().getValue("abq2_naked_vision")); //裸眼视力
            jsonResultObject.put("correctedVision",this.getModel().getValue("abq2_corrected_vision")); //矫正视力
            jsonResultObject.put("colorBlindness",this.getModel().getValue("abq2_color_blindness")); //色盲情况
            jsonResultObject.put("smell",this.getModel().getValue("abq2_smell")); //嗅觉
            jsonResultObject.put("labiaPalate",this.getModel().getValue("abq2_labia_palate")); //唇颚
            jsonResultObject.put("hearing",this.getModel().getValue("abq2_hearing"));
            jsonResultObject.put("ear",this.getModel().getValue("abq2_ear")); //耳朵
            jsonResultObject.put("nose",this.getModel().getValue("abq2_nose")); //鼻子
            //其他
            jsonResultObject.put("bloodSugar",this.getModel().getValue("abq2_blood_sugar")); //血糖
            jsonResultObject.put("bloodRoutine",this.getModel().getValue("abq2_blood_routine")); //血常规
            jsonResultObject.put("liverKidney",this.getModel().getValue("abq2_liver_kidney")); //肝肾功能
            jsonResultObject.put("else",this.getModel().getValue("abq2_else"));

            //调用GPT开发平台微服务
            Map<String , String> variableMap = new HashMap<>();
            variableMap.put("monitoringResult", jsonResultObject.toJSONString());

            Object[] params = new Object[] {
                    //GPT提示编码
                    getPromptFid("prompt-240525AB59B43D"),
                    "",
                    variableMap
            };
            Map<String, Object> result = DispatchServiceHelper.invokeBizService("ai", "gai", "GaiPromptService", "syncCall", params);
            JSONObject jsonObjectResult = new JSONObject(result);
            JSONObject jsonObjectData = jsonObjectResult.getJSONObject("data");
            //设置值
            this.getModel().setValue("abq2_health_result", jsonObjectData.getString("llmValue"));
            Markdown mk = this.getView().getControl("abq2_markdownap");
            mk.setText(jsonObjectData.getString("llmValue"));
        }

    }

    //获取GPT提示的Fid
    public long getPromptFid(String billNo) {
        DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("gai_prompt",
                "number," +
                        "id",
                (new QFilter("number", QCP.equals, billNo)).toArray());
        return dynamicObject.getLong("id");
    }

    @Override
    public void afterBindData(EventObject eventObject) {
        Markdown mk = this.getView().getControl("abq2_markdownap");
        mk.setText(this.getModel().getValue("abq2_health_result").toString());
    }
}
